package com.mydesignpattern.beijing.command;

import com.mydesignpattern.beijing.command.command.AirConditionCommand;
import com.mydesignpattern.beijing.command.command.Command;
import com.mydesignpattern.beijing.command.command.LightCommand;
import com.mydesignpattern.beijing.command.receiver.Light;

import java.util.ArrayList;
import java.util.List;

/**
 * 调用者
 *
 * 命令模式中，就是利用invoker实现的客户端跟执行者解耦
 * 客户端直接调用invoker，invoker中包含一个或者多个command对象，通过对invoker方法对command处理的不同实现各种不同的功能
 */
public class Invoker {

    private Command command;

    private List<Command> comandList = new ArrayList<Command>();

    //模拟实现的功能

    public void on(){
        this.command.on();
    }

    public void off(){
        this.command.off();
    }

    //睡觉，组合关灯，调低空调风力两个操作
    public void sleep(){
        if(comandList != null){
            for(Command command:comandList){
                if(command instanceof AirConditionCommand){
                    command.windDown();
                }
                if(command instanceof LightCommand){
                    command.off();
                }
            }
        }
    }

    //其它自由扩展的功能
    public void other(){}



    public void addCommand(Command command){
        this.comandList.add(command);
    }

    public void setCommand(Command command){
        this.command = command;
    }


}
